#ifndef HTTP_SERVER_HPP_
#define HTTP_SERVER_HPP_

#include "Common.hpp"
#include "Epoll.hpp"
#include "ThreadPool.hpp"
#include "HTTP_Request.hpp"
#include "timer.hpp"

class HTTP_Server
{
private:
    struct sockaddr_in HttpServerAddr;              // 服务器地址
    int listen_fd;                                  // 监听的socket描述符
    static Epoll epoll;                                    // IO多路复用
    ThreadPool threadpool;                          // 线程池
    static Timer_Queue timer_queue;                // 定时器队列
    
    // 可以考虑在这里加一个临时的request指针，否则来回倒腾太费劲儿了。

    // 线程的回调函数(这个必须是静态函数)
    static void get_request(void *arg);

public:
    HTTP_Server();
    void Init();                            // 初始化服务器参数
    void Run();                             // 启动服务器
    void Close();                           // 关闭服务器（待实现，当前只能ctrl c）

    // 这个意思大概就是单例模式，前期没设计好，只能这么搞了..... :(
    static Timer_Queue& get_timer_queue();
};

#endif